<?php
/*

*/

/**
 * @todo doc
 */
class Utilisateur
{
  private $id;
  private $login;
  private $password;
  private $prenom;
  private $nom;
  private $mail;
  private $isAdmin;
  private $isUploader;
  private $isActif;
  private $more;

  /**
   * Constructeur de utilisateur
   *
   * @param string $login nom de l'utilisateur
   * @param string $password mot de passe de l'utilisateur
   * @param string $prenom prenom de l'utilisateur
   * @param string $nom nom de l'utilisateur
   * @param int $isAdmin
   */
  function __construct($login, $password=null, $prenom=null, $nom=null, $mail=null, $isAdmin=0, $isUploader=0, $isActif=0)
  {    
    $this->more = array();
    // L'utilisateur existe en base
    if(is_null($password))
      {
	$sql = SQL::GetInstance();
	$infosUtilisateur = $sql->getUtilisateur($login);
	
	$this->id         = $infosUtilisateur['idUtilisateur'];
	$this->login      = $infosUtilisateur['loginUtilisateur'];
	$this->password   = $infosUtilisateur['passwordUtilisateur'];
	$this->prenom     = $infosUtilisateur['prenomUtilisateur'];
	$this->nom        = $infosUtilisateur['nomUtilisateur'];
	$this->mail       = $infosUtilisateur['mailUtilisateur'];
	$this->isAdmin    = $infosUtilisateur['isAdmin'];
	$this->isUploader = $infosUtilisateur['isUploader'];
	$this->isActif    = $infosUtilisateur['isActif'];
      }
    // On a toutes les infos pour construire l'utilisateur
    else
      {
	$this->id         = 0;
	$this->login      = $login;
	$this->password   = $password;
	$this->prenom     = $prenom;
	$this->nom        = $nom;
	$this->mail       = $mail;
	$this->isAdmin    = $isAdmin;
	$this->isUploader = $isUploader;
	$this->isActif    = $isActif;
      }
      startPlugin('Utilisateur___construct',$this);
  }
  
  /**
   * Quelques getters utilisé lors de l'identification
   */
public function getLogin()     {return $this->login;}
public function getPassword()  {return $this->password;}
public function getPrenom()    {return $this->prenom;}
public function getNom()       {return $this->nom;}
public function getMail()      {return $this->mail;}
public function getIsAdmin()   {return $this->isAdmin == 1;}
public function getIsUploader(){return $this->isUploader == 1;}
public function getIsActif()   {return $this->isActif == 1;}
public function getMore()    {return $this->more;}

public function setMore($more)       {$this->more    = array_merge($this->more,$more);}
public function setIsActif($isActif)       {$this->isActif    = $isActif;}
public function setIsAdmin($isAdmin)       {$this->isAdmin    = $isAdmin;}
public function setIsUploader($isUploader) {$this->isUploader = $isUploader;}
public function setLogin($login)           {$this->login      = $login;}
public function setNom($nom)               {$this->nom        = $nom;}
public function setMail($mail)             {$this->mail       = $mail;}
public function setPassword($password)     {$this->password   = $password;}
public function setPrenom($prenom)         {$this->prenom     = $prenom;}
	
  /**
   * Méthode qui enregistre l'utilisateur en base
   */
    function enregistrer()
    {
        $userExist = true;
        $sql = SQL::GetInstance();
        try 
        {
            $sql->getUtilisateur($this->login);
        } 
        catch (ListerException $e) 
        {
            $userExist = false;
        }
        
        if ($userExist === true)
            throw new ListerException(131, $this->login);
        
        if (! $sql->enregistrerUtilisateur($this->login, $this->password, $this->prenom, $this->nom, $this->mail, $this->isAdmin, $this->isUploader, $this->isActif)) 
        {
            throw new ListerException(9, $this->login);
        }
        startPlugin('Utilisateur_enregistrer', $this);
    }

  /**
   * Méthode qui teste la validité d'un utilisateur
   *
   * @param md5 $pass
   * @return bool $ok vrai si l'identification est correcte
   */
  public function estValide($pass)
  {
    startPlugin('Utilisateur_estValide',$this);
    return ($pass == $this->password);
  }

  /**
   * Méthode qui teste si l'utilisateur est actif
   *
   * @return bool $ok vrai si l'utilisateur est actif
   */
  public function estActif()
  {
    startPlugin('Utilisateur_estActif',$this);
    return ($this->isActif);
  }
  
  /**
   * Méthode qui met à jour les informations de l'utilisateur en base
   *
   * @param string $password mot de passe de l'utilisateur (en clair)
   * @param string $prenom prenom de l'utilisateur
   * @param string $nom nom de l'utilisateur
   * @param bool $isAdmin statut de l'utilisateur 0 = normal, 1 = administrateur
   * @param bool $isUploader statut de l'utilisateur upload
   * @param bool $isActif statut de l'utilisateur activé
   */
  public function maj($password=null, $prenom=null, $nom=null, $mail=null, $isAdmin=null, $isUploader=null, $isActif=null)
  {
    //--- a refaire
    $sql = SQL::GetInstance();
    if (is_null($password))
      {
	if(! $sql->majUtilisateur($this->id, $this->login, $this->password, $this->prenom, $this->nom, $this->mail, $this->isAdmin, $this->isUploader, $this->isActif))
	  {
	    throw new ListerException(10, $this->login);
	  }
      }
    else
      {
	if(! $sql->majUtilisateur($this->id, $this->login, $password, $prenom, $nom, $mail, $isAdmin, $isUploader, $isActif))
	  {
	    throw new ListerException(10, $this->login);
	  }
      }
      startPlugin('Utilisateur_maj',$this);
  }

  /**
   * Méthode qui supprime l'utilisateur en base
   */
  public function supprimer()
  {
    $sql = SQL::GetInstance();
    if(! $sql->supprimerUtilisateur($this->login))
      {
	throw new ListerException(11, $this->nom);
      }
      startPlugin('Utilisateur_supprimer',$this);
  }
  
  /**
   * Méthode qui retourne un tableau contenant les infos de l'utilisateur, pour le template
   *
   * @return array $t Tableau contenant les infos de l'utilisateur
   */
  function returnArray()
  {
    startPlugin('Utilisateur_returnArray',$this);
    return array_merge($this->more,array(
        'LOGIN_UTILISATEUR'       => $this->login,
	'PRENOM_UTILISATEUR'      => $this->prenom,
	'NOM_UTILISATEUR'         => $this->nom,
	'MAIL_UTILISATEUR'        => $this->mail,
	'IS_UPLOADER_UTILISATEUR' => $this->isUploader,
	'IS_ADMIN_UTILISATEUR'    => $this->isAdmin,
	'IS_ACTIF_UTILISATEUR'    => $this->isActif));
  }
}

?>
